package com.example.filter;

import com.example.entity.Manager;
import com.example.entity.User;
import jakarta.servlet.FilterChain;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebFilter;
import jakarta.servlet.http.HttpFilter;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import jakarta.servlet.http.HttpSession;

import java.io.IOException;

@WebFilter("/*")
public class MainFilter extends HttpFilter {

    @Override
    public void doFilter(HttpServletRequest req, HttpServletResponse res, FilterChain chain) throws IOException, ServletException {
        String url = req.getRequestURL().toString();
        // 判断是否是公开访问路径（如 /public_callus、/public_baggage_regulations）
        boolean isPublicPath = url.contains("/public_");
        // 允许访问静态资源、登录页面和管理员登录页面
        if (!url.contains("/static/") && !url.endsWith("user_login") && !url.endsWith("manager_login") && !url.endsWith("user_register") && !url.endsWith("host") && !isPublicPath) {
            HttpSession session = req.getSession(false); // 不创建新会话
            User user = session != null ? (User) session.getAttribute("user") : null;
            Manager manager = session != null ? (Manager) session.getAttribute("manager") : null;

            // 检查是否已登录
            if (user == null && manager == null) {
                res.sendRedirect("host"); // 未登录，重定向到登录页面
                return;
            }

            // 检查权限
            if (url.contains("/user_") && manager != null) {
                // 管理员尝试访问用户页面，拒绝访问
                res.sendRedirect("manager_index"); // 可以重定向到管理员首页或其他提示页面
                return;
            }

            if (url.contains("/manager_") && user != null) {
                // 用户尝试访问管理员页面，拒绝访问
                res.sendRedirect("user_index"); // 可以重定向到用户首页或其他提示页面
                return;
            }
        }

        // 继续执行过滤链
        chain.doFilter(req, res);
    }
}
